/*
 * Visitor.java
 */

package MP.syntaxanalysis;


public interface Visitor {

  // Programs
  public abstract void visitProgramAST(ProgramAST ast);

  // Variable/constant declaration
  public abstract void visitVarDeclPartAST(VarDeclPartAST ast);
  public abstract void visitVarDeclAST(OneDeclAST ast);
  public abstract void visitConstDeclAST(OneDeclAST ast);
  public abstract void visitEmptyVarDeclPartAST(EmptyVarDeclPartAST ast);

  // Type
  public abstract void visitIntTypeAST(IntTypeAST ast);
  public abstract void visitRealTypeAST(RealTypeAST  ast);
  public abstract void visitBoolTypeAST(BoolTypeAST ast);
  public abstract void visitArrayTypeAST(ArrayTypeAST ast);

  // Const
  public abstract void visitIntLiteralAST(IntLiteralAST ast);
  public abstract void visitRealLiteralAST(RealLiteralAST ast);
  public abstract void visitStringLiteralAST(StringLiteralAST ast);
  public abstract void visitBoolLiteralAST(BoolLiteralAST ast);

  // Procedure/function declaration
  public abstract void visitProDeclPartAST(ProDeclPartAST ast);
  public abstract void visitEmptyProDeclPartAST(EmptyProDeclPartAST ast);
  public abstract void visitProcDeclAST (ProcDeclAST  ast);
  public abstract void visitFuncDeclAST (FuncDeclAST  ast);
  public abstract void visitParaListAST (ParaListAST  ast);
  public abstract void visitEmptyParaListAST(EmptyParaListAST  ast);

  // statement
  public abstract void visitStmtListAST(StmtListAST ast);
  public abstract void visitEmptyStmtListAST(EmptyStmtListAST ast);
  public abstract void visitCompStatAST(CompStatAST ast);
  public abstract void visitAssiStmtAST(AssiStmtAST ast);
  public abstract void visitForStmtAST(ForStmtAST ast);
  public abstract void visitIfThenStmtAST(IfThenStmtAST ast);
  public abstract void visitIfThenElseStmtAST(IfThenElseStmtAST ast);
  public abstract void visitRepeatStmtAST(RepeatStmtAST ast);
  public abstract void visitWhileStmtAST(WhileStmtAST ast);
  public abstract void visitBreakStmtAST(BreakStmtAST ast);
  public abstract void visitContStmtAST(ContStmtAST ast);
  public abstract void visitRetNullStmtAST(RetNullStmtAST ast);
  public abstract void visitRetStmtAST(RetStmtAST ast);
  public abstract void visitCallStmtAST(CallStmtAST ast);

  // expression
  public abstract void visitBinExprAST(BinExprAST ast);
  public abstract void visitUnaryExprAST(UnaryExprAST ast);
  public abstract void visitVarExprAST(VarExprAST ast);
  public abstract void visitEleExprAST(EleExprAST ast);
  public abstract void visitCallExprAST(CallExprAST ast);
  public abstract void visitExprListAST(ExprListAST ast);
  public abstract void visitEmptyExprListAST(EmptyExprListAST ast);
  
  //Lvalue
  public abstract void visitLvalueAST(LvalueAST ast);
}
  
